"""
数据库装饰器模块

该模块包含所有数据库类使用的装饰器函数，以确保代码的一致性和复用性。
"""

from functools import wraps


def auto_clear(func):
    """
    自动清除装饰器
    
    在方法执行完毕后自动调用实例的_clear方法，确保状态清理。
    适用于所有同步数据库操作类。
    """
    @wraps(func)
    def wrapper(self, *args, **kwargs):
        try:
            return func(self, *args, **kwargs)
        finally:
            self._clear()
    return wrapper


def async_auto_clear(func):
    """
    异步自动清除装饰器
    
    在异步方法执行完毕后自动调用实例的_clear方法，确保状态清理。
    适用于异步数据库操作类。
    """
    @wraps(func)
    async def wrapper(self, *args, **kwargs):
        try:
            import asyncio
            if asyncio.iscoroutinefunction(func):
                return await func(self, *args, **kwargs)
            else:
                return func(self, *args, **kwargs)
        finally:
            self._clear()
    return wrapper